package com.scu.bank.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

import org.apache.commons.lang3.StringUtils;

/** * @author  作者: wjyang
	@date 创建时间：2018年9月6日 下午1:42:00 *
	@version 1.0 *
	@parameter  *
	@since  2018年9月6日
	@return  */
public final class DateUtil {

	private DateUtil(){}
	/**
	 * 时间对象转字符串 日期 yyyy-MM-dd
	 * @param date
	 * @return
	 * @author 2019年6月6日 企业信息平台事业部/wjyang
	 */
	public static String formatDate(Date date){
		return format(date, "yyyy-MM-dd");
	}
	/**
	 * 时间对象转字符串时间 yyyy-MM-dd HH:mm:ss
	 * @param date
	 * @return
	 * @author 2019年6月6日 企业信息平台事业部/wjyang
	 */
	public static String formatTime(Date date){

		return format(date, "yyyy-MM-dd HH:mm:ss");
	}
	/**
	 * 字符串(yyyy-MM-dd HH:mm:ss) 转日期对象
	 * @param dateStr
	 * @return
	 * @author 2019年6月6日 企业信息平台事业部/wjyang
	 */
	public static Date getDateTime(String dateStr){
		return parse(dateStr, "yyyy-MM-dd HH:mm:ss");
	}

	/**
	 * 时间对象转字符串时间 yyyyMMddHHmmss
	 * 获取当前时间str，一般用于文件命名时间戳
	 * @return
	 */
	public static String formatDateTimeStr(){
		return format(new Date(), "yyyyMMddHHmmss");
	}
	/**
	 * 字符串(yyyy-MM-dd) 转日期对象
	 * @param dateStr
	 * @return
	 * @author 2019年6月6日 企业信息平台事业部/wjyang
	 */
	public static Date getDate(String dateStr){
		return parse(dateStr, "yyyy-MM-dd");
	}

	/**
	 *
	 * 日期对象转日期字符串
	 * @param date
	 * @param pattern
	 * @return
	 * @author 2019年6月6日 企业信息平台事业部/wjyang
	 */
	public static String format(Date date,String pattern){
		if(date == null)
			return null;
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		return sdf.format(date);
	}
	/**
	 * 根据日期格式获取日期对象
	 * @param date
	 * @param pattern
	 * @return
	 * @author 2019年6月6日 企业信息平台事业部/wjyang
	 */
	public static Date parse(String date,String pattern){
		if(StringUtils.isBlank(date))
			return null;
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		try {
			return sdf.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
	}
	public static Date getDate(Long minus){
		if( minus==null || minus<0)
			return new Date();
		return new Date(minus);
	}
	public static String getDateString(Long minus){
		if(minus==null||minus<0)
			return null;
		return formatDate(new Date(minus));
	}
	public static String getDateTimeString(Long minus){
		if(minus==null||minus<0)
			return null;
		return formatTime(new Date(minus));
	}

	public static Date addDate(Date date,int minutes){
        date.setTime(date.getTime() + minutes * 60 * 1000);
        return date;
    }
}
